import java.util.Scanner;

/*
import java.util.Scanner;

//在同一个类中,分别定义求两个整数的方法 和 三个小数之和的方法。 并执行代码，求出结果
public class J20250324 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int a=sc.nextInt();
        int b=sc.nextInt();
        double c=sc.nextDouble();
        double d=sc.nextDouble();
        double e=sc.nextDouble();
        int sum1=add(a,b);
        double sum2=add(c,d,e);
        System.out.println(sum1);
        System.out.println(sum2);
    }
    public static int add(int x,int y){
        return x+y;
    }
    public static double add(double x,double y,double z){
        return x+y+z;
    }
}

*/
//在同一个类中定义多个方法：要求不仅可以求2个整数的最大值，还可以求3个小数的最大值？
/*
public class J20250324{
    public static void main(String[] args) {

            Scanner sc=new Scanner(System.in);
            int a=sc.nextInt();
            int b=sc.nextInt();
            double c=sc.nextDouble();
            double d=sc.nextDouble();
            double e=sc.nextDouble();
            int max1=max(a,b);
            double max2=max(c,d,e);
            System.out.println(max1);
            System.out.println(max2);
    }
    public static int max(int m,int n){
        if(m>=n){
            return m;
        }else{
            return n;
        }
    }
    public static double max(double x,double y,double z){
        if(x>=y){
            if(x>=z){
                return x;
            }else{
                return z;
            }
        }else{
            if(y>=z){
                return y;
            }else{
                return z;
            }
        }
    }
}
*/
//递归求N 的阶乘        n==1   return   1   n>1   return n*
/*public class J20250324 {
    public static void main(String[] args) {
        System.out.println("请输入一个非负数：");
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int ret=jiecheng(n);
        System.out.println("阶乘结果为"+ret);

    }
    public static int  jiecheng(int n){
        if(n==1||n==0){
            return 1;
        }
            return n*jiecheng(n-1);
    }
}*/
// Java 的方法定义规则：一个方法如果声明了返回值类型（比如 int），
// 那么所有可能的执行路径都必须返回一个值。否则，编译器会报错，提示缺少返回语句。
/*
如果 n 是 0 或 1，返回 1。
如果 n 大于 1，递归调用自身并返回 n * jiecheng(n-1)。
但是，代码中没有处理 n 小于 0 的情况。
问题就出在这里：当 n 是负数时，代码没有任何返回值。编译器无法确定这种情况是否会被触发，
因此报错 "Missing return statement"。*/





//递归求 1 + 2 + 3 + ... + 10
/*public class J20250324 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int ret=add(n);
        System.out.println("1 + 2 + 3 + ... + 10="+ret);
    }
    public static int add(int m){
        if(m==1){
            return 1;
        }
        return m+add(m-1);
    }
}*/
//按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)    （递归）
/*
public class J20250324 {

    public static void func(int n) {
        if (n < 10) {
            System.out.print(n+" ");
            return;
        }
        func(n/10);
        System.out.print(n % 10+" ");;
    }

    public static void main(String[] args) {
        Scanner  sc=new Scanner(System.in);
        int m=sc.nextInt();
        func(m);
    }

}
*/
//写一个递归方法，输入一个非负整数，返回组成它的数字之和
/*
public class J20250324 {
    public static int add(int n){
        if(n<10){
            return n;
        }
        return n%10+add(n/10);
    }
    public static void main(String[] args) {
        System.out.println("输入一个数字：");
        Scanner sc=new Scanner(System.in);
        int m= sc.nextInt();
        int ret=add(m);
        System.out.println(ret);
    }
}
*/
//递归求斐波那契数列的第 N 项  1 1 2 3 5 8 13 21 34 55 89
/*
public class J20250324 {
    public static int febo(int n){
        if(n==1||n==2){
            return 1;
        }
        return febo(n-2)+febo(n-1);
    }
    public static void main(String[] args) {
        System.out.println("输入一个数字：");
        Scanner sc=new Scanner(System.in);
        int m= sc.nextInt();
        int ret=febo(m);
        System.out.println(ret);
    }
}
*/
//递归求解汉诺塔问题
/*
* a 起始柱   b中间柱   c最终位置柱    n 盘子个数
* 盘子为1   a->c
* 盘子为2   a->b  a->c   b->c
* 盘子为3   a->c  a->b   c->b   a->c   b->a   b->c   a->c
* 将n个盘子借助b，移动到c。
* 第一步将n-1个盘子借助c移到b，将第n个盘子移动到c。    第二步将n-1个盘子借助a移动到c。    递归
* */
public  class J20250324 {
    public static void move(char m,char n){
        System.out.print(" "+m+"->"+n+" ");
    }
    public static void han(int n,char a,char b,char c){
        if(n==1){
          move(a,c);
        }else{
            han(n-1,a,c,b);
            move(a,c);
            han(n-1,b,a,c);
        }

    }
    public static void main(String[] args) {
        System.out.println("请输入一个数字：");
        Scanner sc=new Scanner(System.in);
        int m= sc.nextInt();
        han(m,'a','b','c');
    }
}
